import { resolve } from 'path'
import vue from '@vitejs/plugin-vue'
import { defineConfig, loadEnv } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { createHtmlPlugin } from "vite-plugin-html"; // 可在 index.html 中使用环境变量
import viteCompression from 'vite-plugin-compression'; // 文件压缩
import VueSetupExtend from 'vite-plugin-vue-setup-extend'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig(({ mode }) => {

  // 读取配置文件
  let env = loadEnv(mode, process.cwd())

  return {
    // vite 配置
    define: {
      'process.env': env
    },
    // 在引用资源时，可以用‘@/资源路径’直接访问
    resolve:{
      extensions: ['.js', '.ts', '.json', '.vue'],
      alias:{
        '~': resolve(__dirname, './'),
        '@': resolve(__dirname, './src')
      }
    },
    // 强制预构建插件包
    optimizeDeps: {
      include: [
        'axios',
        'element-plus'
      ],
    },
    // 打包配置
    build: {
      assetsDir: './static', // 指定生成静态资源的存放路径
      cssCodeSplit: env.VITE_CSS_CODE_SPLIT, // 构建后是否拆分CSS代码
      sourcemap: env.VITE_SOURCE_MAP, // 构建后是否生成 source map 文件
      chunkSizeWarningLimit: env.VITE_CHUNK_SIZE_WARNING_LIMIT, // 消除打包大小超过500kb警告
      minify: 'terser', // 编译优化手段
      terserOptions: {
        compress: {
          drop_console: env.VITE_DROP_DEBUGGER, // 构建后是否去除console
          drop_debugger: env.VITE_DROP_CONSOLE, // 构建后是否去除debugger
        },
        output: {
          comments: env.VITE_HIDDEN_COMMENT, // 构建后是否隐藏注释内容
        }
      },
      rollupOptions: {
        output: {
          //静态资源分类打包
          chunkFileNames: "static/js/[name]-[hash].js",
          entryFileNames: "static/js/[name]-[hash].js",
          assetFileNames: "static/[ext]/[name]-[hash].[ext]",
          manualChunks(id) {
            //静态资源分拆打包
            if (id.includes("node_modules")) {
              return id
                .toString()
                .split("node_modules/")[1]
                .split("/")[0]
                .toString();
            }
          },
        },
      },
    },
    plugins: [
      vue(),
      viteCompression(),
      VueSetupExtend(),
      AutoImport({
        //解决报错，会生成一个auto-import文件，不要删掉。
        dts:"node_modules/unplugin-auto-import/auto-import.d.ts",
        // 匹配的文件，也就是哪些后缀的文件需要自动引入
        include: [
          /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
          /\.vue$/, /\.vue\?vue/, // .vue
        ],
        imports: [
          'vue',
          'pinia',
          'vue-i18n',
          'vue-router'
        ],
        resolvers: [
          ElementPlusResolver()
        ],
      }),
      Components({
        resolvers: [
          ElementPlusResolver()
        ],
        directoryAsNamespace: true,
      }),
      createHtmlPlugin({
        inject: {
          data: {
            // html页面使用 title 获取系统标题
            title: env.VITE_APP_TITLE
          }
        }
      })
    ],
    // 配置前端服务地址和端口
    server:{
      host: env.VITE_SERVER_HOST,
      port: env.VITE_SERVER_PROT,

      https: false, // 是否开启 https
      open: false, // 设置服务启动时是否自动打开浏览器
      cors: true, // 允许跨域
      // 设置代理，根据项目实际情况配置
      proxy: {
        "/api": {
          target: env.VITE_API_DOMAIN,
          changeOrigin: true,
          rewrite: path => path.replace(/^\/api/, '')
        }
      }
    }
  }
})
